package cn.iocoder.yudao.module.system.job;

import cn.hutool.core.date.DateUtil;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
import cn.iocoder.yudao.module.system.service.useractivity.UserActivityStatsService;
import cn.iocoder.yudao.module.system.service.userbehavior.UserBehaviorStatsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.time.LocalDate;

/**
 * 用户统计数据计算定时任务
 *
 * @author 系统开发团队
 */
@Component
@Slf4j
public class UserStatsCalculationJob implements JobHandler {

    @Resource
    private UserActivityStatsService userActivityStatsService;

    @Resource
    private UserBehaviorStatsService userBehaviorStatsService;

    @Override
    @TenantJob
    public String execute(String param) throws Exception {
        log.info("[execute] 开始执行用户统计数据计算定时任务");

        try {
            // 获取昨天的日期
            LocalDate yesterday = LocalDate.now().minusDays(1);

            // 计算用户活动统计
            boolean activityResult = userActivityStatsService.calculateUserActivityStats(yesterday);
            log.info("[execute] 用户活动统计计算结果：{}, 日期：{}", activityResult, yesterday);

            // 计算用户行为统计
            boolean behaviorResult = userBehaviorStatsService.calculateUserBehaviorStats(yesterday);
            log.info("[execute] 用户行为统计计算结果：{}, 日期：{}", behaviorResult, yesterday);

            // 返回执行结果
            String result = String.format("用户活动统计：%s，用户行为统计：%s，计算日期：%s",
                    activityResult ? "成功" : "失败",
                    behaviorResult ? "成功" : "失败",
                    yesterday);

            log.info("[execute] 完成执行用户统计数据计算定时任务，结果：{}", result);
            return result;

        } catch (Exception e) {
            log.error("[execute] 执行用户统计数据计算定时任务失败", e);
            throw e;
        }
    }
}